# @Time : 2024-11-06 11:54
# @Author : Fioman 
# @Phone : 13149920693
"""
time.sleep(n): 线程休眠使用.线程会被操作系统挂起,直到指定的时间过去.这个n秒时间段内,不会做任何操作,直到
                         指定时间过去.多线程中让出CPU控制权,以为是操作系统控制,不会被Python的其他事件或者信号
                         中断.

gevent.sleep(n):  是一个基于协程的函数,是让协程暂停执行,并允许其他协程继续执行.通过事件循环和非阻塞IO来
                              实现高效的任务调度

gevent.sleep()提供了比多线程更高效的并发处理能力,特别适合高并发网络服务器,网络爬虫等.
它比操作系统线程更轻量级和高效. 当你在多线程中使用gevent.sleep()的时候,在没有启用gevent的猴子补丁
(monkey patching),gevent.sleep()的行为实际上和time.sleep()类似,因为它无法影响标准线程的调度.
在多线程中最好地实践是使用time.sleep()来挂起线程,让出CPU资源.
在协程的开发环境中最佳的实践是使用gevent.sleep(),来暂停当前协程的执行.
"""
import threading
import time

import gevent
from gevent import monkey

monkey.patch_all()


def worker3():
    print("Worker3 start")
    gevent.sleep(3)
    print("Worker3 end")


def worker():
    print("worker start")
    time.sleep(5)
    print("sleep 5 seconds worker end")


def worker2():
    time.sleep(1)
    print("worker2 start")
    time.sleep(2)
    print("sleep 2 seconds worker2 end")


if __name__ == '__main__':
    thread = threading.Thread(target=worker)
    thread2 = threading.Thread(target=worker2)
    thread.start()
    thread2.start()
    thread.join()
    thread2.join()

    # 协程调用函数
    gevent.spawn(worker3).join()
